﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace KingSite.Library.Security {
    public class Hash {
        /// <summary>
        /// 计算字符串参数的32位HASH值
        /// </summary>
        /// <param name="toHash"></param>
        /// <returns></returns>
        public static string Get32BitHash(string toHash) {
            MD5CryptoServiceProvider crypto = new MD5CryptoServiceProvider();
            byte[] bytes = Encoding.UTF7.GetBytes(toHash);
            bytes = crypto.ComputeHash(bytes);
            StringBuilder sb = new StringBuilder();
            foreach (byte num in bytes) {
                sb.AppendFormat("{0:x2}", num);
            }            
            return sb.ToString();
        }

        public static string HashStringBySHA1(string s) {
            // 将字符串编码为一个字节序列  
            byte[] bufferValue = Encoding.UTF8.GetBytes(s);
            // 定义加密哈希算法操作类，在System.Security.Cryptography 命名空间 下  
            HashAlgorithm ha = new SHA1CryptoServiceProvider();
            // 计算指定字节数组的哈希值  
            byte[] bufferHash = ha.ComputeHash(bufferValue);
            // 释放由 HashAlgorithm 类使用的所有资源  
            ha.Clear();
            // 将 8 位无符号整数数组的值转换为它的等效 String 表示形式（使用 base 64 数字编码）。  
            return Convert.ToBase64String(bufferHash);
        }  
    }
}
